|
(******************************************************************************)
(**) ОТДЕЛ ПроКомплLU+;
(******************************************************************************
* НАЗНАЧЕНИЕ:
* решение систем линейных уравнений (A*x=b) методом LU разложения для
* комплексных чисел
*
* ПРИМЕЧАНИЯ:
* Система уравнений записана в файле "ПроМатр3.дан".
* В этом файле 1-я строка содержит размер матрицы A
* (число строк и столбцов), в следующих строках записанны значения элементов
* матрицы A, потом на отдельной строке размер матрицы свободных членов B
* (число векторов b и их размер), а далее значения элементов матрицы B,
* в которой строки являются векторами b.
*
* Квадратная матрица A (N на N) раскладывается на два сомножителя (A=L*U),
* где L это нижняя треугольная матрица с единичной главной диагональю,
* а U верхняя треугольная матрица. Затем решаются две системы уравнений
* L*z=b и U*x=z с использованием того преимущества, что матрицы этих систем
* являются треугольными.
******************************************************************************)
ИСПОЛЬЗУЕТ
Матр ИЗ "...\Отделы\Числа\",
КомплМатр ИЗ "...\Отделы\Числа\",
МатрВВ ИЗ "...\Отделы\Числа\",
Читать ИЗ "...\Отделы\Обмен\",
Вывод ИЗ "...\Отделы\Обмен\";
(******************************************************************************)
ЗАДАЧА Голова;
ПЕР
n:ЦЕЛ; (* размер вектора свободных членов *)
nv:ЦЕЛ; (* число векторов свободных членов *)
A:КомплМатр.Доступ; (* матрица системы *)
B:КомплМатр.Доступ; (* вектора свободных членов *)
X:КомплМатр.Доступ; (* вектора решения *)
p:Матр.Перестановки; (* перестановки для обратного хода *)
i:ЦЕЛ;
п:Читать.Поток;
УКАЗ
п:=МатрВВ.ОткрытьПоток("ПроКомплLU.дан");
A:=МатрВВ.ЧитатьКомплМатр(п);
B:=МатрВВ.ЧитатьКомплМатр(п);
Читать.Закрыть(п);
nv:=РАЗМЕР(B^,0);
n:=РАЗМЕР(B^,1);
СОЗДАТЬ(X,nv,n);
Вывод.Цепь("^Исходная матрица:^");
МатрВВ.ВыводКомплМатр(" (%5.2f;%5.2f)",A^);
Вывод.Цепь("^Вектора свободных членов:^");
ОТ i:=0 ДО nv-1 ВЫП
МатрВВ.ВыводКомплВект(" (%5.2f;%5.2f)",B[i])
КОН;
(* После выполнения РазложитьНаLU матрицы L и U оказываются на месте матрицы A *)
ЕСЛИ КомплМатр.РазложитьНаLU(A^,p) = 0 ТО
(* решаем систему для каждого вектора свободных членов b *)
Вывод.Цепь("^Вектора решения:^");
ОТ i:=0 ДО nv-1 ВЫП
КомплМатр.РешитьИзLU(A^,B[i],p,X[i]);
МатрВВ.ВыводКомплВект(" (%5.2f;%5.2f)",X[i])
КОН
ИНАЧЕ
Вывод.Цепь("^Вырожденная матрица!^")
КОН
КОН Голова;
(******************************************************************************)
УКАЗ
Голова
КОН ПроКомплLU.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|